pkg_ver = lambda pkg: "{:<20}{:}".format(pkg.__name__,pkg.__version__)
# ROOT
import uproot
print(pkg_ver(uproot))
import ROOT
# Machine Learning
import sklearn
print(pkg_ver(sklearn))
import torch
print(pkg_ver(torch))
# Data science
import scipy
print(pkg_ver(scipy))
import numpy
print(pkg_ver(numpy))
import pandas
print(pkg_ver(pandas))
# Visualizations
import matplotlib
print(pkg_ver(matplotlib))
import matplotlib.pyplot as plt
import hvplot
print(pkg_ver(hvplot))
import hvplot.pandas
pandas.options.plotting.backend = 'holoviews'
import tqdm
print(pkg_ver(tqdm))
from tqdm.auto import tqdm
tqdm.pandas()
import glob
uproot 5.0.7 sklearn 1.2.2 torch 2.0.0 scipy 1.10.1 numpy 1.23.5 pandas 1.5.3 matplotlib 3.7.1 hvplot None
tqdm 4.62.3
%jsroot
class spectrum:
def __init__(self, File_, iTED_, Crystal_, Configuration_, Window_, Calibration_, Run_):
self.__File = ROOT.TFile.Open(File_,"READ")
self.__iTED = iTED_
self.__Crystal = Crystal_
self.__Configuration = Configuration_
self.__Window = Window_
self.__Calibration = Calibration_
self.__Run = Run_
def __call__(self, ch):
return numpy.polyval(self.__Calibration[::-1],ch)
def __ch__(self, en):
p = numpy.poly1d(self.__Calibration[::-1])
temp = set(i for i in (p - en).roots if i > 0)
return list(temp).pop()
def File(self):
return self.__File
def TH1D(self):
self.__TH1D = self.__File.Get(
"{}_{}_amplitude_spectra;1".format(
"SCATTERER" if self.__Crystal==0 else "ABSORBER",
self.__iTED if self.__Crystal==0 else "{}_{}".format(self.__iTED,self.__Crystal)
)
)
return self.__TH1D
def Calibration(self):
return self.__Calibration
def iTED(self):
return self.__iTED
def Crystal(self):
return self.__Crystal
def Configuration(self):
return self.__Configuration
def Window(self):
return self.__Window
def Rate(self, Time_):
return self.__TH1D.Integral()/Time_
def Alpha(self, Time_):
return self.__TH1D.Integral(
self.__TH1D.FindBin(self.__ch__(1600)),
self.__TH1D.FindBin(self.__ch__(2800))
)/Time_
def __repr__(self):
return "iTED: {},Crystal: {},Configuration: {},Window: {}, Run: {}".format(
self.__iTED,
self.__Crystal,
self.__Configuration,
self.__Window,
self.__Run
)
def __str__(self):
return "{}.{}.{}.{}.{}".format(
self.__iTED,
self.__Crystal,
self.__Configuration,
self.__Window,
self.__Run
)
calp = glob.glob('/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/Calibration/**/*.CALp', recursive=True)
calibrations = []
for i in calp:
line = pandas.read_csv(
i,
sep = " : ",
skiprows=[0,4,5,6],
header=None,
engine="python"
).drop([0], axis=1).T
line["crystal"] = i.split("/")[-1][:2]
line["cw"] = i.split("/")[-1][5:8]
calibrations.append(line)
calibrations_df = pandas.concat(calibrations)
def get_resolution(cell):
TH1D = cell.TH1D()
TH1D.GetXaxis().SetRange(TH1D.FindBin(100),TH1D.FindBin(400))
MaxBin = TH1D.FindBin(TH1D.GetMaximumBin())
ADC_Low = MaxBin-50
ADC_High = MaxBin+40
gaussFit = ROOT.TF1("gaussFit", "pol2(0)+gaus(3)", ADC_Low, ADC_High)
gaussFit.SetParameters(1000,-1,0,TH1D.GetMaximum(),MaxBin,10)
TH1D.Fit(gaussFit,"QR")
sigma = abs(gaussFit.GetParameter(5))
centroid_ch = gaussFit.GetParameter(4)
x1 = cell(centroid_ch+sigma*numpy.sqrt(2*numpy.log(2)))
x2 = cell(centroid_ch-sigma*numpy.sqrt(2*numpy.log(2)))
centroid = cell(centroid_ch)
fwhm = x1-x2
return sigma*numpy.sqrt(2*numpy.log(2))*2/centroid_ch*100, (fwhm/centroid)*100, centroid
def TH1D_draw(cell):
TH1D = cell.TH1D()
canvas = ROOT.TCanvas()
canvas.cd()
TH1D.SetTitle(repr(cell))
TH1D.SetStats(False)
latex = ROOT.TLatex()
latex.SetNDC()
latex.SetTextSize(0.03)
TH1D.Draw("pe")
l1,l2,l3 = get_resolution(cell)
l4 = uproot.open(f"../../data/nTOF_March2022/888/CW100ns/Resolutions_Cs137_CenterScatter_iTED{cell.iTED()}_8.8.8_100ns.root:grResolEnergy;1").values()[1][cell.Crystal()]
latex.DrawText(0.7, 0.8, "R_ch: {:.2f}%".format(l1))
if l4*0.9 < l2 < l4*1.1:
latex.DrawText(0.7, 0.75, "R_E: {:.2f}%".format(l2))
else:
latex.DrawText(0.7, 0.75, "->R_E: {:.2f}%".format(l2))
if 662*(1-l2/100) < l3 < 662*(1+l2/100):
latex.DrawText(0.7, 0.7, "E: {:.0f}keV".format(l3))
else:
latex.DrawText(0.7, 0.7, "->E: {:.0f}keV".format(l3))
latex.DrawText(0.7, 0.65, "R_E(old): {:.2f}%".format(l4))
latex.DrawText(0.7, 0.6, "Change: {:.2f}%".format(l2-l4))
return canvas
Data = {
1: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_53_56_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie1_40_CW{win}.root",
2: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_54_14_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie2_40_CW{win}.root",
3: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_54_33_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie3_40_CW{win}.root",
4: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_54_51_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie4_40_CW{win}.root",
5: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_55_10_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie5_40_CW{win}.root",
6: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_55_29_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie6_40_CW{win}.root",
7: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_55_47_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie7_40_CW{win}.root",
8: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_56_06_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie8_40_CW{win}.root",
9: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_56_24_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie9_40_CW{win}.root",
10: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_56_43_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie10_40_CW{win}.root",
11: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_57_02_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie11_40_CW{win}.root",
12: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_57_20_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie12_40_CW{win}.root",
13: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_57_39_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie13_40_CW{win}.root",
14: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_57_57_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie14_40_CW{win}.root",
15: lambda win: f"/run/media/bgameiro/d043b5e4-57a4-457e-8839-cb1adc9c72bc/Data/data_2023_05_22/Temperature_Cs137_center_D.2023_05_22_T.15_58_16_C.itedABCD_lab_custom_2023.02.22_4.0v_887_15s_serie15_40_CW{win}.root",
}
entries = []
for i_run in tqdm(Data):
for ASIC in tqdm([0]):
for CW in [100,200]:
file_data = Data[i_run](CW)
spectr = spectrum(
file_data,
"A",
0,
"88c",
CW,
calibrations_df.query("crystal == 'A0' & cw == '100'").iloc[0][[0,1,2]],
i_run
)
entries.append(
pandas.DataFrame({
"resolution": get_resolution(spectr)[1],
"fit": (get_resolution(spectr)[2]-662)/662*100,
"peak": get_resolution(spectr)[2],
"cps": spectr.Rate(30),
"alpha": spectr.Alpha(30),
"iTED": "A",
"crystal": 0,
"cw": CW,
"configuration": "88c",
"run": i_run,
"obj": spectr,
"temperature": uproot.open(file_data)['T_ASIC_0;1'].values()[1].mean()
}, index=[0])
)
entries_df = pandas.concat(entries, ignore_index=True)
0%| | 0/15 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
entries_df
| resolution | fit | peak | cps | alpha | iTED | crystal | cw | configuration | run | obj | temperature | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6.615661 | 5.364127 | 697.510518 | 598.633333 | 11.400000 | A | 0 | 100 | 88c | 1 | A.0.88c.100.1 | 29.200000 |
| 1 | 6.259460 | 5.675688 | 699.573053 | 601.566667 | 11.433333 | A | 0 | 200 | 88c | 1 | A.0.88c.200.1 | 29.200000 |
| 2 | 6.426005 | 3.509538 | 685.233145 | 588.400000 | 13.266667 | A | 0 | 100 | 88c | 2 | A.0.88c.100.2 | 29.542857 |
| 3 | 6.051092 | 3.865828 | 687.591784 | 590.066667 | 13.333333 | A | 0 | 200 | 88c | 2 | A.0.88c.200.2 | 29.542857 |
| 4 | 6.440137 | 2.751300 | 680.213604 | 579.500000 | 10.166667 | A | 0 | 100 | 88c | 3 | A.0.88c.100.3 | 29.823077 |
| 5 | 6.158773 | 3.064168 | 682.284793 | 581.866667 | 10.200000 | A | 0 | 200 | 88c | 3 | A.0.88c.200.3 | 29.823077 |
| 6 | 6.503773 | 1.589532 | 672.522701 | 581.200000 | 12.466667 | A | 0 | 100 | 88c | 4 | A.0.88c.100.4 | 30.000000 |
| 7 | 6.284833 | 1.855155 | 674.281129 | 584.233333 | 12.500000 | A | 0 | 200 | 88c | 4 | A.0.88c.200.4 | 30.000000 |
| 8 | 6.406230 | 0.627043 | 666.151027 | 572.866667 | 12.366667 | A | 0 | 100 | 88c | 5 | A.0.88c.100.5 | 30.228571 |
| 9 | 6.212240 | 0.920471 | 668.093519 | 574.233333 | 12.533333 | A | 0 | 200 | 88c | 5 | A.0.88c.200.5 | 30.228571 |
| 10 | 6.488312 | -0.529078 | 658.497504 | 570.500000 | 12.333333 | A | 0 | 100 | 88c | 6 | A.0.88c.100.6 | 30.435714 |
| 11 | 6.315197 | -0.291239 | 660.072000 | 572.900000 | 12.433333 | A | 0 | 200 | 88c | 6 | A.0.88c.200.6 | 30.435714 |
| 12 | 6.438912 | -1.171249 | 654.246333 | 564.233333 | 12.733333 | A | 0 | 100 | 88c | 7 | A.0.88c.100.7 | 30.564286 |
| 13 | 6.142366 | -0.915529 | 655.939195 | 567.700000 | 12.766667 | A | 0 | 200 | 88c | 7 | A.0.88c.200.7 | 30.564286 |
| 14 | 6.429407 | -1.042616 | 655.097884 | 563.800000 | 12.300000 | A | 0 | 100 | 88c | 8 | A.0.88c.100.8 | 30.746154 |
| 15 | 6.259785 | -0.792691 | 656.752383 | 566.566667 | 12.400000 | A | 0 | 200 | 88c | 8 | A.0.88c.200.8 | 30.746154 |
| 16 | 6.423355 | -2.088959 | 648.171090 | 555.200000 | 11.333333 | A | 0 | 100 | 88c | 9 | A.0.88c.100.9 | 30.807143 |
| 17 | 6.159459 | -1.790502 | 650.146873 | 559.333333 | 11.600000 | A | 0 | 200 | 88c | 9 | A.0.88c.200.9 | 30.807143 |
| 18 | 6.701600 | -3.161442 | 641.071252 | 554.900000 | 13.300000 | A | 0 | 100 | 88c | 10 | A.0.88c.100.10 | 30.900000 |
| 19 | 6.424872 | -2.884297 | 642.905953 | 558.533333 | 13.266667 | A | 0 | 200 | 88c | 10 | A.0.88c.200.10 | 30.900000 |
| 20 | 6.544011 | -3.506867 | 638.784544 | 554.200000 | 12.633333 | A | 0 | 100 | 88c | 11 | A.0.88c.100.11 | 31.100000 |
| 21 | 6.317894 | -3.251903 | 640.472401 | 556.400000 | 12.633333 | A | 0 | 200 | 88c | 11 | A.0.88c.200.11 | 31.100000 |
| 22 | 6.401276 | -4.355122 | 633.169089 | 532.333333 | 12.333333 | A | 0 | 100 | 88c | 12 | A.0.88c.100.12 | 31.100000 |
| 23 | 6.172739 | -4.092941 | 634.904732 | 534.400000 | 12.600000 | A | 0 | 200 | 88c | 12 | A.0.88c.200.12 | 31.100000 |
| 24 | 6.488503 | -4.947359 | 629.248482 | 545.766667 | 11.633333 | A | 0 | 100 | 88c | 13 | A.0.88c.100.13 | 31.300000 |
| 25 | 6.243210 | -4.709348 | 630.824114 | 547.933333 | 11.766667 | A | 0 | 200 | 88c | 13 | A.0.88c.200.13 | 31.300000 |
| 26 | 6.537247 | -4.802907 | 630.204755 | 550.633333 | 11.533333 | A | 0 | 100 | 88c | 14 | A.0.88c.100.14 | 31.335714 |
| 27 | 6.233759 | -4.560096 | 631.812168 | 553.666667 | 11.866667 | A | 0 | 200 | 88c | 14 | A.0.88c.200.14 | 31.335714 |
| 28 | 6.547150 | -5.163845 | 627.815344 | 545.366667 | 13.333333 | A | 0 | 100 | 88c | 15 | A.0.88c.100.15 | 31.392308 |
| 29 | 6.334186 | -4.918200 | 629.441517 | 549.166667 | 13.266667 | A | 0 | 200 | 88c | 15 | A.0.88c.200.15 | 31.392308 |
entries_df.hvplot.scatter(y='peak', x='temperature', by="cw")
entries_df.hvplot.scatter(y='fit', x='temperature', by="cw")
entries_df.hvplot.scatter(y='resolution', x='temperature', by="cw")